#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
目录结构优化脚本
整理应收账款统计表项目的文件结构
"""

import os
import shutil
from datetime import datetime

def create_organized_structure():
    """创建规范的目录结构"""
    
    # 定义目录结构
    directories = {
        "src": "源代码文件",
        "build": "构建相关文件", 
        "dist": "发布文件",
        "docs": "文档说明",
        "tests": "测试文件",
        "scripts": "脚本工具",
        "backup": "备份文件",
        "temp": "临时文件"
    }
    
    print("🗂️  开始创建规范目录结构...")
    
    # 创建目录
    for dir_name, description in directories.items():
        if not os.path.exists(dir_name):
            os.makedirs(dir_name)
            print(f"📁 创建目录: {dir_name}/ - {description}")
        else:
            print(f"✅ 目录已存在: {dir_name}/")

def organize_files():
    """整理文件到对应目录"""
    
    print("\n📋 开始整理文件...")
    
    # 文件分类规则
    file_rules = {
        # 源代码文件
        "src": [
            "应收账款统计表.py",
            "应收账款统计表_优化界面.py", 
            "应收账款统计表_稳定优化版.py",
            "demo.py",
            "demo_optimized.py"
        ],
        
        # 脚本工具
        "scripts": [
            "快速打包.bat",
            "自动打包.bat", 
            "打包_优化界面版.bat",
            "修复UI打包.bat",
            "build_exe.py",
            "打包工具.py"
        ],
        
        # 测试文件
        "tests": [
            "test_export.py",
            "test_simple.py",
            "test_ui.py",
            "测试_UI优化.py",
            "测试Excel导出优化.py",
            "UI修复验证.py"
        ],
        
        # 文档说明
        "docs": [
            "README.md",
            "界面优化说明.md",
            "数据格式修复报告.md",
            "颜色格式修复说明.md",
            "UI修复完成报告.md",
            "UI打包问题解决方案.md",
            "Excel导出优化说明.md",
            "Excel导出优化完成报告.md"
        ],
        
        # 预览和演示文件
        "src": [
            "界面优化预览.py"
        ]
    }
    
    # 移动文件
    moved_count = 0
    for target_dir, files in file_rules.items():
        for filename in files:
            if os.path.exists(filename):
                target_path = os.path.join(target_dir, filename)
                try:
                    shutil.move(filename, target_path)
                    print(f"📦 移动: {filename} → {target_dir}/")
                    moved_count += 1
                except Exception as e:
                    print(f"❌ 移动失败: {filename} - {str(e)}")
    
    print(f"\n✅ 成功移动 {moved_count} 个文件")

def handle_build_files():
    """处理构建相关文件"""
    
    print("\n🔨 处理构建文件...")
    
    # 如果存在旧的build目录，备份后清理
    if os.path.exists("build") and os.path.isdir("build"):
        if os.listdir("build"):  # 目录不为空
            backup_name = f"build_backup_{datetime.now().strftime('%Y%m%d_%H%M%S')}"
            shutil.move("build", f"backup/{backup_name}")
            print(f"📦 旧构建文件已备份到: backup/{backup_name}")
            os.makedirs("build")
        else:
            print("✅ 构建目录已存在且为空")
    
    # 清理spec文件
    spec_files = [f for f in os.listdir(".") if f.endswith(".spec")]
    for spec_file in spec_files:
        target_path = os.path.join("build", spec_file)
        shutil.move(spec_file, target_path)
        print(f"📦 移动构建文件: {spec_file} → build/")

def create_main_files():
    """在根目录创建主要文件"""
    
    print("\n📝 创建主要配置文件...")
    
    # 创建requirements.txt（如果不存在）
    if not os.path.exists("requirements.txt"):
        requirements_content = """pandas>=1.3.0
openpyxl>=3.0.7
tkcalendar>=1.6.1
pyinstaller>=4.5.1
"""
        with open("requirements.txt", "w", encoding="utf-8") as f:
            f.write(requirements_content)
        print("📄 创建: requirements.txt")
    
    # 更新.gitignore
    gitignore_content = """# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
*.manifest
*.spec

# 应收账款系统特定文件
temp/
backup/
历史表格/
*.xlsx
*.xls

# 临时文件
*.tmp
*.temp
*.log

# IDE
.vscode/
.idea/
*.swp
*.swo

# 系统文件
.DS_Store
Thumbs.db
"""
    
    with open(".gitignore", "w", encoding="utf-8") as f:
        f.write(gitignore_content)
    print("📄 创建/更新: .gitignore")

def create_project_readme():
    """创建项目主README"""
    
    readme_content = """# 应收账款统计管理系统

🏢 一个专业的应收账款管理桌面应用程序，采用现代化界面设计，支持数据录入、统计分析、Excel导出等功能。

## 🚀 快速开始

### 运行程序
```bash
# 推荐使用稳定版本
python src/应收账款统计表_稳定优化版.py

# 或使用优化界面版本（开发调试）
python src/应收账款统计表_优化界面.py
```

### 打包程序
```bash
# 使用修复版打包脚本
scripts/修复UI打包.bat

# 或使用快速打包
scripts/快速打包.bat
```

## 📁 项目结构

```
accounts-receivable-manager/
├── src/                    # 源代码
│   ├── 应收账款统计表_稳定优化版.py    # 主程序（推荐）
│   ├── 应收账款统计表_优化界面.py      # 优化界面版
│   └── 界面优化预览.py               # 界面预览
├── scripts/                # 构建脚本
│   ├── 快速打包.bat
│   └── 修复UI打包.bat
├── tests/                  # 测试文件
├── docs/                   # 文档说明
├── dist/                   # 发布文件
├── build/                  # 构建缓存
├── requirements.txt        # 依赖列表
├── order_data.json         # 数据文件
└── README.md              # 项目说明
```

## ✨ 功能特色

- 🎨 **现代化界面**: 卡片式布局、渐变色彩、悬停动画
- 📊 **数据统计**: 实时汇总、客户分析、图表展示
- 📋 **Excel导出**: 专业格式、公式联动、历史备份
- 💾 **数据安全**: 自动保存、格式验证、错误恢复
- 📦 **独立部署**: 打包为exe，无需Python环境

## 📖 使用说明

详细使用说明请查看 [docs/](docs/) 目录下的文档。

## 🔧 开发指南

1. **环境配置**: `pip install -r requirements.txt`
2. **运行测试**: `python tests/测试_UI优化.py`  
3. **构建程序**: 运行 `scripts/修复UI打包.bat`

## 📄 许可证

MIT License - 详见 LICENSE 文件

---

*应收账款统计管理系统 v2.1+ | 现代化界面版本*
"""
    
    with open("README.md", "w", encoding="utf-8") as f:
        f.write(readme_content)
    print("📄 创建项目主README.md")

def create_source_index():
    """在src目录创建说明文件"""
    
    src_readme = """# 源代码文件说明

## 🎯 主程序文件

### 应收账款统计表_稳定优化版.py ⭐
- **推荐使用**: 生产环境主程序
- **特点**: 稳定性优化，兼容打包
- **用途**: 日常使用和打包部署

### 应收账款统计表_优化界面.py
- **用途**: 开发调试版本
- **特点**: 完整UI动画效果
- **注意**: 打包时可能有兼容性问题

### 界面优化预览.py
- **用途**: 界面效果预览
- **特点**: 轻量级演示
- **场景**: 界面设计参考

## 🔧 开发建议

1. **日常开发**: 使用 `应收账款统计表_优化界面.py`
2. **生产部署**: 使用 `应收账款统计表_稳定优化版.py`
3. **界面预览**: 使用 `界面优化预览.py`

## 📦 打包说明

推荐使用稳定版本进行打包：
```bash
# 推荐方式
../scripts/修复UI打包.bat 应收账款统计表_稳定优化版.py
```
"""
    
    os.makedirs("src", exist_ok=True)
    with open("src/README.md", "w", encoding="utf-8") as f:
        f.write(src_readme)
    print("📄 创建src/README.md")

def cleanup_temp_files():
    """清理临时文件"""
    
    print("\n🧹 清理临时文件...")
    
    # 要清理的临时文件模式
    temp_patterns = [
        "*.pyc",
        "*.pyo", 
        "*.pyd",
        "__pycache__",
        "*.tmp",
        "*.temp"
    ]
    
    import glob
    cleaned_count = 0
    
    for pattern in temp_patterns:
        for file_path in glob.glob(pattern):
            try:
                if os.path.isdir(file_path):
                    shutil.rmtree(file_path)
                    print(f"🗑️  删除目录: {file_path}")
                else:
                    os.remove(file_path)
                    print(f"🗑️  删除文件: {file_path}")
                cleaned_count += 1
            except Exception as e:
                print(f"❌ 清理失败: {file_path} - {str(e)}")
    
    print(f"✅ 清理了 {cleaned_count} 个临时文件")

def show_final_structure():
    """显示最终的目录结构"""
    
    print("\n" + "="*50)
    print("🎉 目录结构优化完成！")
    print("="*50)
    
    print("\n📁 优化后的目录结构:")
    print("""
📂 accounts-receivable-manager/
├── 📂 src/                          # 源代码
│   ├── 📄 应收账款统计表_稳定优化版.py
│   ├── 📄 应收账款统计表_优化界面.py
│   ├── 📄 界面优化预览.py
│   └── 📄 README.md
├── 📂 scripts/                      # 脚本工具
│   ├── 📄 快速打包.bat
│   ├── 📄 修复UI打包.bat
│   └── 📄 build_exe.py
├── 📂 tests/                        # 测试文件
│   ├── 📄 测试_UI优化.py
│   ├── 📄 测试Excel导出优化.py
│   └── 📄 UI修复验证.py
├── 📂 docs/                         # 文档说明
│   ├── 📄 界面优化说明.md
│   ├── 📄 数据格式修复报告.md
│   └── 📄 Excel导出优化说明.md
├── 📂 dist/                         # 发布文件
├── 📂 build/                        # 构建缓存
├── 📂 backup/                       # 备份文件
├── 📄 requirements.txt              # 依赖列表
├── 📄 order_data.json              # 数据文件
├── 📄 .gitignore                   # Git忽略
└── 📄 README.md                    # 项目说明
""")
    
    print("\n🚀 使用建议:")
    print("1. 📋 查看项目说明: README.md")
    print("2. 🖥️  运行程序: python src/应收账款统计表_稳定优化版.py")
    print("3. 📦 打包程序: scripts/修复UI打包.bat")
    print("4. 📚 查看文档: docs/ 目录")
    print("5. 🧪 运行测试: tests/ 目录")

def main():
    """主函数"""
    print("🗂️  应收账款统计表 - 目录结构优化工具")
    print("=" * 50)
    
    try:
        # 1. 创建目录结构
        create_organized_structure()
        
        # 2. 整理文件
        organize_files()
        
        # 3. 处理构建文件
        handle_build_files()
        
        # 4. 创建配置文件
        create_main_files()
        
        # 5. 创建项目README
        create_project_readme()
        
        # 6. 创建源码说明
        create_source_index()
        
        # 7. 清理临时文件
        cleanup_temp_files()
        
        # 8. 显示最终结构
        show_final_structure()
        
    except Exception as e:
        print(f"❌ 优化过程中出现错误: {str(e)}")
        return False
    
    return True

if __name__ == "__main__":
    success = main()
    if success:
        print(f"\n✅ 目录结构优化成功完成！")
    else:
        print(f"\n❌ 目录结构优化失败，请检查错误信息")
    
    input("\n按回车键退出...")
